package com.techsoul.module.order.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.techsoul.common.core.pojo.vo.UserVo;
import com.techsoul.module.order.pojo.entity.PurchaseOrder;
import com.techsoul.module.order.pojo.entity.SalesOrder;
import com.techsoul.module.order.pojo.entity.SalesOrderItem;
import com.techsoul.module.order.pojo.param.CartItem;
import com.techsoul.module.order.pojo.param.SalesOrderItemSaveParam;
import com.techsoul.module.order.pojo.param.SalesOrderSaveParam;
import com.techsoul.module.order.pojo.param.SalesOrderSearchParam;
import com.techsoul.module.order.pojo.vo.SalesOrderItemVo;
import com.techsoul.module.order.pojo.vo.SalesOrderVo;

import java.util.List;

/**
 * 销售订单 Service接口
 * 
 * @author liuen
 * @date 2020-12-07
 */
public interface ISalesOrderService {

    /**
     * 新增
     * @param params
     * @return
     */
    String insert(SalesOrderSaveParam params);

    /**
     * 删除
     * @param id
     * @return
     */
    Integer delete(String id);

    /**
     * 批量删除
     * @param idList
     */
    void batchDelete(List<String> idList);

    /**
     * 修改
     * @param params
     * @return
     */
    Integer update(SalesOrderSaveParam params);

    /**
     * 更新明细，全删全入
     * @param params
     * @return
     */
    void updateItems(SalesOrderSaveParam params);

    /**
     * 预处理订单
     * @param params
     * @return
     */
    List<CartItem> preProcessing(SalesOrderSaveParam params);

    /**
     * 保存订单-新增/修改
     * @param params
     * @return
     */
    void save(SalesOrderSaveParam params);

    /**
     * 提交订单-保存/修改
     * @param params
     * @return
     */
    String submit(SalesOrderSaveParam params);

    /**
     * 审核保存
     * @param act
     */
//    void auditSave(Act act);

    /**
     * 下载提案/报价
     * @param id
     * @return
     */
    String downloadQuote(String id);

    /**
     * 确认提案
     * @param id
     */
    void confirmQuote(String id);
    PurchaseOrder genPurchaseOrder(SalesOrderItem item, String supplier, UserVo userVo);
    void genPurchaseOrderItem(SalesOrderItem item,SalesOrder salesOrder,PurchaseOrder purchaseOrder,String nums,String suppliers,String price,UserVo userVo);
    /**
     * 签订合同
     * @param params
     */
    void signContract(SalesOrderSaveParam params);

    /**
     * 确认采购
     * @param params
     */
    void confirmPurchase(SalesOrderSaveParam params);
    /**
     * 确认支付
     * @param params
     */
    void confirmPay(SalesOrderSaveParam params);

    /**
     * 发货计划
     * @param params
     */
    void deliveryPlan(SalesOrderSaveParam params);

    /**
     * 发货
     * @param params
     */
    void delivery(SalesOrderSaveParam params);

    /**
     * 确认收货
     * @param params
     */
    void confirmReceipt(SalesOrderSaveParam params);

    /**
     * 详情
     * @param id
     * @return
     */
    SalesOrderVo findById(String id);

    /**
     * 根据订单号获取详情
     * @param salesOrderNo
     * @return
     */
    SalesOrderVo findBySalesOrderNo(String salesOrderNo);

    /**
     * 根据流程实例获取详情
     * @param procInsId
     * @return
     */
    SalesOrderVo findByProcInsId(String procInsId);

    /**
     * 列表
     * @param params
     * @return
     */
    List<SalesOrderVo> findAll(SalesOrderSearchParam params);

    /**
     * 列表-分页
     * @param params
     * @param current
     * @param pageSize
     * @return
     */
    IPage<SalesOrderVo> findAll(SalesOrderSearchParam params, Integer current, Integer pageSize);

    /**
     * 我的订单-分页
     * @param params
     * @param current
     * @param pageSize
     * @return
     */
    IPage<SalesOrderVo> findMyOrders(SalesOrderSearchParam params, Integer current, Integer pageSize);

    /**
     * 待审核任务列表
     * @return
     */
//    List<Act> auditingList();

    /**
     * 已审核任务列表-分页
     * @param current
     * @param pageSize
     * @return
     */
//    IPage<Act> auditedList(Integer current, Integer pageSize);

}
